home *** CD-ROM | disk | FTP | other *** search
- ;*******************************************************************************
- ;*
- ;* AEx2.s
- ;* © Simon Callan, 1992
- ;*
- ;* This program is intended as an example of using the Shared C Library from
- ;* assembler.
- ;*
- ;* int main(int argc,char * argv[])
- ;* {
- ;* int loop;
- ;* for(loop=0;loop<argc;loop++)
- ;* printf("arg %d = %s\n",loop,argv[loop]);
- ;* return 0;
- ;* }
- ;*
- ;*******************************************************************************
-
- GET @.Header.Registers
-
- AREA |ASM$$Code|,CODE,READONLY
-
- EXPORT main
- IMPORT printf
- IMPORT |x$stack_overflow|
-
- KEEP ; keep all symbols for debugging
-
- main MOV ip,sp ; Generate APCS-R stack frame
- STMFD sp!,{v1,v2,v3,fp,ip,lr,pc}
- SUB fp,ip,#4
-
- MOV v1,a1 ; preserve a1 + a2 for future reference.
- MOV v2,a2
- CMP sp,sl ; Have we reached the end of the stack (very unlikely at this point) ?
- BLLT |x$stack_overflow| ; Yes
-
- MOV v3,#0 ; loop = 0
- loop CMP v3,v1 ; Have we reached the end ?
- BGE finished ; Yes
- ADR a1,text ; a1 points to text
- MOV a2,v3 ; a2 = loop
- LDR a3,[v2,v3,ASL#2] ; a3 = argv[loop]
- BL printf ; Call printf
- ADD v3,v3,#1 ; loop++
- B loop
-
- finished MOV a1,#0
- LDMEA fp,{v1,v2,v3,fp,sp,pc}^
-
- text = "arg %d = %s",10,0
-
- END
-